import {axios} from "../assets/core/index";
import {ElMessage} from 'element-plus';

/**
 * 使用axios发送get请求
 * @param {*} url 请求地址
 * @param {*} params 请求参数
 * @returns Promise对象，后面跟then((data)=>{...todo}).catch((Error)=>{...todo})
 */
function get(url,params){
    return new Promise((resolved,rejected)=>{
        axios.get(url,{params:params}).then(function(response){
            if(response && response.data && response.data.meta.success){
                resolved(response.data)
            }else{
                ElMessage({
                    message: '返回数据错误',
                    type: 'error',
                })
                throw new Error("服务端异常："+JSON.stringify(response.data.meta.message))
            }
        }).catch((err)=>{
            rejected(new Error(err.message));
        });
    })
    
}

/**
 * 使用axios发送get请求
 * @param {*} url 请求地址
 * @param {*} params 请求参数
 * @returns Promise对象，后面跟then((data)=>{...todo}).catch((Error)=>{...todo})
 */
function post(url,param){
    return new Promise((resolved,rejected)=>{
        axios.post(url,param).then(function(response){
            if(response && response.data && response.data.meta.success){
                resolved(response.data)
            }else{
                ElMessage({
                    message: '返回数据错误',
                    type: 'error',
                })
                throw new Error("服务端异常："+JSON.stringify(response.data.meta.message))
            }
        }).catch((err)=>{
            rejected(new Error(err.message));
        });
    })
}

/**
 * 使用axios发送put请求
 * @param {*} url 请求地址
 * @param {*} params 请求参数
 * @returns Promise对象，后面跟then((data)=>{...todo}).catch((Error)=>{...todo})
 */
function put (url, param) {
    return new Promise((resolved,rejected)=>{
        axios.put(url, param).then(function (response) {
            if(response && response.data && response.data.meta.success){
                resolved(response.data)
            }else{
                ElMessage({
                    message: '返回数据错误',
                    type: 'error',
                })
                throw new Error("服务端异常："+JSON.stringify(response.data.meta.message))
            }
        }).catch((err)=>{
            rejected(new Error(+err.message));
        });
    })
}

/**
 * 使用axios发送del请求
 * @param {*} url 请求地址
 * @param {*} params 请求参数
 * @returns Promise对象，后面跟then((data)=>{...todo}).catch((Error)=>{...todo})
 */
function del (url, param) {
    return new Promise((resolved,rejected)=>{
        axios.delete(url, param).then(function (response) {
            if(response && response.data && response.data.meta.success){
                resolved(response.data)
            }else{
                ElMessage({
                    message: '返回数据错误',
                    type: 'error',
                })
                throw new Error("服务端异常："+JSON.stringify(response.data.meta.message))
            }
        }).catch((err)=>{
            rejected(new Error(err.message));
        });
    })
}

function downloadFile(url, param, fileName) {
    return new Promise((resolved,rejected)=>{
        axios.get(url,{params:param, responseType:"blob"}).then(function(response){
           let blob = new Blob([response.data]);
           let url = window.URL.createObjectURL(blob);
           let a = document.createElement('a');
           a.href = url;
           a.download = fileName;
           a.click();
           window.URL.revokeObjectURL(url);
        }).catch((err)=>{
            rejected(new Error("AXIOS调用错误："+err.message));
        });
    })
}

export default {get,post,put,del, downloadFile}